package pl.elka.simulator.core.configurationCommand.impl;

import java.util.List;

import pl.elka.simulator.core.Constraint;
import pl.elka.simulator.core.Position;
import pl.elka.simulator.core.configurationCommand.ConfigurationCommandType;
import pl.elka.simulator.core.configurationCommand.ICommandParam;
import pl.elka.simulator.core.configurationCommand.IConfigurationCommand;
import pl.elka.simulator.core.configurationCommand.ables.IAbleToConfiguration;
import pl.elka.simulator.core.configurationCommand.ables.IAbleToConstraintConfiguration;

public class DeleteConstraintConfigurationCommand  implements IConfigurationCommand{

	private ICommandParam param;
	
	@Override
	public IConfigurationCommand newInstance() {	
		return new DeleteConstraintConfigurationCommand();
	}

	@Override
	public void setParam(ICommandParam param) {
		this.param = param;
		
	}

	@Override
	public ConfigurationCommandType getType() {		
		return ConfigurationCommandType.DeleteConstraintConfigurationCommand;
	}

	@Override
	public ICommandParam getParam() {		
		return param;
	}
	@Override
	public void execute(IAbleToConfiguration able){
		IAbleToConstraintConfiguration ca = (IAbleToConstraintConfiguration) able;
		
		List<Constraint> constraints = ca.getConstraints();
		
		Position position = CommandUtils.getPosition(this);		
		int i=0;
		for(Constraint constraint:constraints){
			if(constraint.contains(position)){
				break;
			}
			++i;
		}
		if(i<constraints.size()){
			constraints.remove(i);
		}
		
		ca.setConstraints(constraints);
	}

}
